﻿#region License
// /* **************************************************************
// * Copyright (C) intex Consulting GmbH - All Rights Reserved    *
// *--------------------------------------------------------------*
// * Unauthorized copying of this file, via any medium is         *
// * strictly prohibited                                          *
// *--------------------------------------------------------------*
// * Proprietary and confidential                                 *
// *--------------------------------------------------------------*
// * Dissasembling/modifications strictly prohibited!             *
// ***************************************************************/
#endregion

using ComHlp.ContentClasses.VirtualControls.Buttons;
using ComHlp.enums;
using NLog;

namespace ComHlp.Classes.Parser
{
    internal class ButtonParseHelper
    {
        private readonly Logger _log = LogManager.GetCurrentClassLogger();

        /// <summary> parse received button form </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        internal EItxButtonForm ParseButtonForm(string form)
        {
            switch (form.Trim())
            {
                case "R":
                    return EItxButtonForm.Round;
                case "R3":
                    return EItxButtonForm.Round3;
                case "R4":
                    return EItxButtonForm.Round4;
                case "R5":
                    return EItxButtonForm.Round5;
                case "R6":
                    return EItxButtonForm.Round6;
                case "R7":
                    return EItxButtonForm.Round7;
                case "R8":
                    return EItxButtonForm.Round8;
                case "T":
                    return EItxButtonForm.Text;
                case "TC":
                    return EItxButtonForm.TextColored;
                case "PL":
                    return EItxButtonForm.Flat;
                case "E":
                    return EItxButtonForm.SingleBorder;
                case "E3":
                    return EItxButtonForm.SingleBorder3;
                case "E4":
                    return EItxButtonForm.SingleBorder4;
                case "E5":
                    return EItxButtonForm.SingleBorder5;
                case "E6":
                    return EItxButtonForm.SingleBorder6;
                case "E7":
                    return EItxButtonForm.SingleBorder7;
                case "E8":
                    return EItxButtonForm.SingleBorder8;
                case "D":
                    return EItxButtonForm.DoubleBorder;
                case "D3":
                    return EItxButtonForm.DoubleBorder3;
                case "D4":
                    return EItxButtonForm.DoubleBorder4;
                case "D5":
                    return EItxButtonForm.DoubleBorder5;
                case "D6":
                    return EItxButtonForm.DoubleBorder6;
                case "D7":
                    return EItxButtonForm.DoubleBorder7;
                case "D8":
                    return EItxButtonForm.DoubleBorder8;
                default:
#if DEBUG
                    _log.Debug($"Unknown button form: {form}");
#endif
                    return EItxButtonForm.Default;
                case "0":
                case ""://suppress log message for default
                    return EItxButtonForm.Default;
                case "BD":
                    return EItxButtonForm.ButtonDemo;
            }
        }

        public ItxFunctionKey ParseFunctionKey(string functionKey)
        {
            switch (functionKey.Trim())
            {
                case "":
                case "00":// suppress log message
                    return ItxFunctionKey.None;
                default:
#if DEBUG
                    _log.Debug($"Unknown function key: {functionKey}");
#endif
                    return ItxFunctionKey.None;
                case "F1":
                    return ItxFunctionKey.F1;
                case "F2":
                    return ItxFunctionKey.F2;
                case "F3":
                    return ItxFunctionKey.F3;
                case "F4":
                    return ItxFunctionKey.F4;
                case "F5":
                    return ItxFunctionKey.F5;
                case "F6":
                    return ItxFunctionKey.F6;
                case "F7":
                    return ItxFunctionKey.F7;
                case "F8":
                    return ItxFunctionKey.F8;
                case "F9":
                    return ItxFunctionKey.F9;
                case "F10":
                    return ItxFunctionKey.F10;
                case "F11":
                    return ItxFunctionKey.F11;
                case "F12":
                    return ItxFunctionKey.F12;
                case "F13":
                    return ItxFunctionKey.F13;
                case "F14":
                    return ItxFunctionKey.F14;
            }
        }

        public EItxButtonAction ParseAction(string action)
        {
            switch (action.Trim())
            {
                case "":
                    return EItxButtonAction.InsertAndFocus;
                default:
#if DEBUG
                    _log.Debug($"Unknown button action: {action}");
#endif
                    return EItxButtonAction.InsertAndFocus;
                case "+":
                    return EItxButtonAction.Plus;
                case "-":
                    return EItxButtonAction.Minus;
                case "BS":
                    return EItxButtonAction.KeyBackspace;
                case "BT":
                    return EItxButtonAction.KeyTabBack;
                case "CC":
                    return EItxButtonAction.ColorSelection;
                case "CCD":
                    return EItxButtonAction.ColorSelectionDemo;
                case "CF ":
                    return EItxButtonAction.FontSelection;
                case "CLF":
                    return EItxButtonAction.ClearField;
                case "CLP":
                    return EItxButtonAction.StartClientProcedure;
                case "CP":
                    return EItxButtonAction.Focus;
                case "CU ":
                    return EItxButtonAction.FocusField;
                case "CUD":
                    return EItxButtonAction.CursorDown;
                case "CUL":
                    return EItxButtonAction.CursorLeft;
                case "CUR":
                    return EItxButtonAction.CursorRight;
                case "CUU":
                    return EItxButtonAction.CursorUp;
                case "DEL":
                    return EItxButtonAction.KeyDelete;
                case "END":
                    return EItxButtonAction.KeyEnd;
                case "ENT":
                    return EItxButtonAction.KeyReturn;
                case "F1":
                    return EItxButtonAction.KeyF1;
                case "F2":
                    return EItxButtonAction.KeyF2;
                case "F3":
                    return EItxButtonAction.KeyF3;
                case "F4":
                    return EItxButtonAction.KeyF4;
                case "F5":
                    return EItxButtonAction.KeyF5;
                case "F6":
                    return EItxButtonAction.KeyF6;
                case "F7":
                    return EItxButtonAction.KeyF7;
                case "F8":
                    return EItxButtonAction.KeyF8;
                case "F9":
                    return EItxButtonAction.KeyF9;
                case "F10":
                    return EItxButtonAction.KeyF10;
                case "F11":
                    return EItxButtonAction.KeyF11;
                case "F12":
                    return EItxButtonAction.KeyF12;
                case "F13":
                    return EItxButtonAction.KeyF13;
                case "F14":
                    return EItxButtonAction.KeyF14;
                case "FRB":
                    return EItxButtonAction.ColorMetric;
                case "HC":
                    return EItxButtonAction.PerformHardCopy;
                case "HLP":
                    return EItxButtonAction.PerformHelp;
                case "IF ":
                    return EItxButtonAction.InterfaceNull;
                case "M0":
                    return EItxButtonAction.Macro10;
                case "M1":
                    return EItxButtonAction.Macro1;
                case "M2":
                    return EItxButtonAction.Macro2;
                case "M3":
                    return EItxButtonAction.Macro3;
                case "M4":
                    return EItxButtonAction.Macro4;
                case "M5":
                    return EItxButtonAction.Macro5;
                case "M6":
                    return EItxButtonAction.Macro6;
                case "M7":
                    return EItxButtonAction.Macro7;
                case "M8":
                    return EItxButtonAction.Macro8;
                case "M9":
                    return EItxButtonAction.Macro9;
                case "PO1":
                    return EItxButtonAction.KeyPos1Home;
                case "POA":
                    return EItxButtonAction.PositionAppend;
                case "POS":
                    return EItxButtonAction.Position;
                case "TAB":
                    return EItxButtonAction.KeyTab;
            }
        }
    }
}
